package utils

import "encoding/json"

type MessageData struct {
	Tp   string
	Data string
}

func (d *MessageData) GetType() string {
	return d.Tp
}

func (d *MessageData) GetData() string {
	return d.Data
}

type HostInfo struct {
	Hostname string
	Port     string
	Username string
	Password string
}

type InitData struct {
	Tp   string
	Data HostInfo
}

func (d *InitData) GetType() string {
	return d.Tp
}

func (d *InitData) GetData() string {
	data, err := json.Marshal(d.Data)
	if err != nil {
		return "error"
	}
	return string(data)
}

type Data interface {
	GetType() string
	GetData() string
}

func NewData(message []byte) Data {
	var data interface{}
	err := json.Unmarshal(message, &data)
	if err == nil {
		d := data.(map[string]interface{})
		for k, v := range d {
			if k == "tp" {
				switch v {
				case "init":
					mess := InitData{}
					json.Unmarshal(message, &mess)
					return &mess
				default:
					mess := MessageData{}
					json.Unmarshal(message, &mess)
					return &mess
				}
			}
		}
	}
	mess := MessageData{}
	mess.Tp = "error"
	return &mess
}
